﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using SistemaGO_Library.Persistencia.BD;

namespace SistemaGO_Library.Entidades.Mudanca
{
    class RepositorioMudanca : IRepositorioMudanca
    {
        private BD bd = new BD();

        //Descrição: Método que é usado nas regras de negócio do sistema identificando se uma mudança que o mesmo está querendo inserir ou procurar já existe no banco para evitar o cadastro em duplicidade.
        //Valores: cod = atributo identificador da mudança que vai dizer se existe ou não.
        public bool existeMudanca(int cod) {
            string sql = "SELECT mudanca_cod FROM tb_mudancas_ocorrencia WHERE mudanca_cod = " + cod + " ";
            using (SqlConnection conexao = new SqlConnection("Data Source=(local);Initial Catalog=SistemaGO;Integrated Security=True")) {
                conexao.Open();
                SqlCommand comando = new SqlCommand(sql, conexao);
                SqlDataReader dr = comando.ExecuteReader();
                int contador = 0;
                while (dr.Read()) {
                    string exite = dr["mudanca_cod"].ToString();
                    contador = contador + 1;
                }

                if (contador > 0) {
                    return true;
                } else {
                    return false;
                }
            }
        }

        //Descrição: Método que realiza inserção de uma mudança no banco de dados.
        //Valores: mud = mudança passada para que seja realizada a inserção caso ele esteja conforme com todas as regras de negócio.
        public void inserirMudanca(Mudanca mud) {
            StringBuilder sql = new StringBuilder();
            sql.Append("INSERT INTO tb_mudancas_ocorrencia (ocorrencia_original_cod, ocorrencia_cod, usu_login_responsavel, mudanca_data) ");
            sql.Append("VALUES ("+ mud.Ocorrencia_original_cod + ", " + mud.Ocorrencia_cod + ", '" + mud.Usu_login_responsavel + "', '" + mud.Mudanca_data.ToString("MM/dd/yyyy") + "')");
            bd.rodarComando(sql.ToString());
        }

        //Descrição: Método que realiza busca de uma mudança no banco de dados.
        //Valores: cod = codigo passado para que seja realizada a busca.
        public Mudanca buscarMudanca(int cod) {
            Mudanca mud = new Mudanca();
            string sql = "SELECT * FROM tb_mudancas_ocorrencia WHERE mudanca_cod = " + cod + " ";

            using (SqlConnection conexao = new SqlConnection("Data Source=(local);Initial Catalog=SistemaGO;Integrated Security=True")) {
                conexao.Open();
                SqlCommand comando = new SqlCommand(sql, conexao);
                SqlDataReader dr = comando.ExecuteReader();
                while (dr.Read()) {
                    mud.Mudanca_cod = int.Parse(dr["mudanca_cod"].ToString());
                    mud.Ocorrencia_original_cod = int.Parse(dr["ocorrencia_original_cod"].ToString());
                    mud.Ocorrencia_cod = int.Parse(dr["ocorrencia_cod"].ToString());
                    mud.Usu_login_responsavel = dr["usu_login_responsavel"].ToString();
                    mud.Mudanca_data = DateTime.Parse(dr["mudanca_data"].ToString());
                }
                return mud;
            }
        }

        //Descrição: Método que realiza alteração de uma mudança no banco de dados.
        //Valores: cod = codigo passado para que seja realizada a busca de qual mudança ele irá alterar, novaMudança = nova mudança que será inserida no lugar da antiga.
        public void alterarMudanca(int cod, Mudanca novaMudanca) {
            string sql;
            sql = "UPDATE tb_mudancas_ocorrencia SET ocorrencia_original_cod = " + novaMudanca.Ocorrencia_original_cod + ", ocorrencia_cod = " + novaMudanca.Ocorrencia_cod + ", usu_login_responsavel = '" + novaMudanca.Usu_login_responsavel + "', usu_data_nasc = '" + novaMudanca.Mudanca_data.ToString("MM/dd/yyyy") + "' ";
            bd.rodarComando(sql);
        }

        //Descrição: Método que realiza exclusão de uma mudança no banco de dados.
        //Valores: cod = codigo passado para que seja realizada a busca no banco para exclusão.
        public void excluirMudanca(int cod) {
            string sql;
            sql = "DELETE FROM tb_mudancas_ocorrencia WHERE mudanca_cod = " + cod + " ";
            bd.rodarComando(sql);
        }
    }
}
